package com.java.day12.queue;

import java.io.File;
import java.util.LinkedList;

/**
 * 按照层级关系打印一个目录中的所有内容
 * 注意：需要逐层打印
 *
 * 使用队列
 *
 * 树的层序遍历 （广度优先遍历）
 *
 */
public class QueueDemo02 {


    public static void printDirByLevel(String rootFilepath){

        //1. String ---> File对象 （目录或则文件）
        File file = new File(rootFilepath);
        if (file.isFile()) {
            // 如何传递参数是一个文件，那么直接打印这个文件并返回
            System.out.println(file.getName());
            return;
        }

        //2. 创建一个任务队列，给队列中添加任务元素
        LinkedList<File> queue = new LinkedList<>();
        queue.offer(file);  // 队列中的第一个元素
        while (queue.size()>0){  // 如果队列中还有元素，就继续循环
            // 取出队列首元素
            File first = queue.poll();
            System.out.println(first.getName());
            // 获取首元素的孩子 ，然后放入 队列中
            File[] files = first.listFiles();
            if (files!=null){
                // 如果有孩子的话，把孩子添加到队列中等待下一轮处理
                for (int i = 0; i < files.length; i++) {
                    queue.offer(files[i]);
                }
            }
        }

    }


    public static void main(String[] args) {


        String filepath = "D:\\abc";
        printDirByLevel(filepath);

//        // java中代表目录和文件的都是File对象
//        File file = new File(filepath);
//        System.out.println(file.isDirectory()); // true
//
//        System.out.println(file.getName()); // 打印目录的名字
//
//        // 获取一个目录下的内容
//        File[] files = file.listFiles();
//        for (int i = 0; i < files.length; i++) {
//            System.out.println(files[i].getName());
//        }
//
//        File file1 = new File("D:\\abc\\a");
//        File[] files1 = file1.listFiles();
//        for (int i = 0; i < files1.length; i++) {
//            System.out.println(files1[i].getName());
//        }

    }

}
